home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / dev / e / amigae21b.lha / Amiga_E_v2.1b / Sources / Utilities / Nkript.e < prev    next >
Text File  |  1992-09-02  |  2KB  |  77 lines

  1. /* Nkript.e, very simple file (de)coder
  2.    USAGE: nkript <file>                             */
  3.  
  4. ENUM ER_NONE,ER_FILE,ER_MEM,ER_USAGE,ER_OUT,ER_ILLEGAL,ER_NONUM
  5.  
  6. DEF flen,mem,handle=NIL,key,keyadd,file[200]:STRING,p
  7.  
  8. PROC main()
  9.   WriteF('Nkript (c) 1992 $#%!\n')
  10.   IF StrCmp(arg,'',1) OR StrCmp(arg,'?',2) THEN error(ER_USAGE)
  11.   flen:=FileLength(arg)
  12.   handle:=Open(arg,OLDFILE)
  13.   IF (flen<1) OR (handle=NIL) THEN error(ER_FILE)
  14.   mem:=New(flen+4)
  15.   IF mem=NIL THEN error(ER_MEM)
  16.   IF Read(handle,mem,flen)<>flen THEN error(ER_FILE)
  17.   Close(handle); handle:=NIL
  18.   key:=readpass('key',4,FALSE)
  19.   keyadd:=readpass('pin',3,TRUE) OR 3
  20.   WriteF('Now (de)coding "\s".\n',arg)
  21.   nkript()
  22.   p:=InStr(arg,'.',0)
  23.   StrCopy(file,arg,p)
  24.   IF StrCmp(arg+p,'.nkr',ALL)=FALSE THEN StrAdd(file,'.nkr',ALL)
  25.   handle:=Open(file,NEWFILE)
  26.   IF handle=NIL THEN error(ER_OUT)
  27.   WriteF('Writing "\s".\n',file)
  28.   IF Write(handle,mem,flen)<>flen THEN error(ER_OUT)
  29.   error(ER_NONE)
  30. ENDPROC
  31.  
  32. PROC nkript()
  33.    MOVE.L flen,D7
  34.    LSR.L  #2,D7        /* D7 = #of LONGs */
  35.    MOVE.L key,D6
  36.    MOVE.L keyadd,D4
  37.    MOVE.L mem,A0
  38. l: MOVE.L D4,D5
  39.    SUB.L  D6,D5
  40.    LSL.L  #3,D6        /* random alg.  D6*7+keyadd (11) */
  41.    ADD.L  D5,D6
  42.    EOR.L  D6,(A0)+
  43.    DBRA   D7,l
  44.    SUB.L  #$10000,D7
  45.    BCC.S  l        /* DBRA.L emulation */
  46. ENDPROC
  47.  
  48. PROC readpass(messy,numchars,decflag)
  49.   DEF s[25]:STRING,a,t,n=0,f=1
  50.   WriteF('\s[\d]: ',messy,numchars)
  51.   ReadStr(stdout,s)
  52.   IF EstrLen(s)<>numchars THEN error(ER_ILLEGAL)
  53.   IF decflag
  54.     t:=s
  55.     FOR a:=1 TO numchars
  56.       n:=n+(t[]-"0"*f)
  57.       IF (t[]<"0") OR (t[]++>"9") THEN error(ER_NONUM)
  58.       f:=f*10
  59.     ENDFOR
  60.     ^s:=n
  61.   ENDIF
  62. ENDPROC ^s
  63.  
  64. PROC error(nr)
  65.   IF handle THEN Close(handle)
  66.   SELECT nr
  67.     CASE ER_NONE;    WriteF('Done.\n')
  68.     CASE ER_FILE;    WriteF('Could not read file "\s" !\n',arg)
  69.     CASE ER_MEM;     WriteF('No memory for loading file!\n')
  70.     CASE ER_USAGE;   WriteF('USAGE: Nkript <file>\n')
  71.     CASE ER_OUT;     WriteF('Could not write file "\s" !\n',file)
  72.     CASE ER_ILLEGAL; WriteF('Wrong #of chars\n')
  73.     CASE ER_NONUM;   WriteF('not a decimal number\n')
  74.   ENDSELECT
  75.   CleanUp(0)
  76. ENDPROC
  77.